home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_13_07 / dawes / count3.cpp < prev   
C/C++ Source or Header  |  1995-05-01  |  1KB  |  54 lines

  1. //  Listing 3 - Count3 program
  2.  
  3. #include <cstring.h>
  4. #include <iomanip.h>
  5. #include <algo.h>
  6. #include <map.h>
  7. #include <vector.h>
  8.  
  9. struct long_t { long v; long_t() : v(0) {} };
  10.  
  11. typedef map< string, long_t, less<string> > map_t;
  12. struct ct_t { string str; long_t count; };
  13. typedef vector< ct_t >                      vec_t;
  14.  
  15. static inline int show_m( const map_t::value_type& x )
  16.   { cout << setw(7) << x.second.v << " - " << x.first << endl; }
  17.  
  18. static inline bool order( const ct_t& x, const ct_t& y )
  19.   { return x.count.v > y.count.v; }
  20.  
  21. static inline int show_v( const ct_t& x )
  22.   { cout << setw(7) << x.count.v << " - " << x.str << endl; }
  23.  
  24. int main() {
  25.  
  26.   string   str;
  27.   map_t    ct_map;
  28.  
  29.   while ( cin >> str ) ++ct_map[str].v;
  30.  
  31.   cout << "Ordered by string:" << endl;
  32.   for_each( ct_map.begin(), ct_map.end(), ptr_fun( show_m ) );
  33.  
  34.   vec_t    ct_vec;
  35.  
  36.   ct_vec.reserve( ct_map.size() );
  37.  
  38.   for ( map_t::iterator it = ct_map.begin();
  39.         it != ct_map.end(); ++it ) {
  40.     ct_t ct;
  41.     ct.str = (*it).first;
  42.     ct.count = (*it).second;
  43.     ct_vec.push_back( ct );
  44.     }
  45.  
  46. //  stable_sort( ct_vec.begin(), ct_vec.end(), ptr_fun( order ) );
  47.   sort( ct_vec.begin(), ct_vec.end(), ptr_fun( order ) );
  48.  
  49.   cout << "Ordered by count:" << endl;
  50.   for_each( ct_vec.begin(), ct_vec.end(), ptr_fun( show_v ) );
  51.  
  52.   return EXIT_SUCCESS;
  53.   }
  54.